## 实验二  交通灯模块

![img](./media/wps41-1776762444022-10-1776762506176-28.png) 

**实验说明**

我想大家都看见过交通灯，就是马路上十字路口的红绿灯。如果您开过车，我想您一定仔细观察过交通灯，如果您还没有驾驶过车，您是否仔细观察过交通灯呢？在我们这个套件中，就包含一个交通灯模块。我们经常会用红绿黄3个LED外接电路来模拟路边的红绿黄灯闪烁。因此我们特别设计了这款模块，模块上自带了红黄绿3个LED灯，我们这个实验就做一个模拟交通灯。

 

**实验原理**

前面第一课我们就学习了如何控制一个LED，由原理图容易得知，控制这个模块就好比分别控制3个独立的LED灯，给对应颜色灯高电平就亮起对应的颜色。比如，我们给信号“R”输出高电平，也就是3.3V，则红色LED点亮。

![image-20260421175102710](./media/image-20260421175102710.png)

**实验器材**

| ![img](./media/wps43-1776762444023-12-1776762506177-31.jpg) | ![img](./media/wps44-1776762444023-13-1776762506177-30.jpg) | ![img](./media/wps45-1776762444023-14-1776762506177-32.jpg) | ![img](./media/wps46-1776762444023-15-1776762506177-33.png) | ![img](./media/wps47-1776762444023-16-1776762506177-34.jpg) |
| ----------------------------------------------------------- | ----------------------------------------------------------- | ----------------------------------------------------------- | ----------------------------------------------------------- | ----------------------------------------------------------- |
| Raspberry Pi Pico板*1                                       | Raspberry Pi Pico扩展板*1                                   | keyes DIY电子积木 交通灯模块*1                              | 防反插5Pin*1                                                | MicroUSB线*1                                                |

 

 **接线图**

![img](./media/wps48-1776762444023-17-1776762506177-35.png) 

 

**测试代码**

```c
/* 

 * Keyes Starter Kit for Raspberry Pi Pico

 * lesson 2

 * Traffic_Light

*/

int greenPin = 12;  //绿色LED接GP12

int yellowPin = 13; //黄色LED接GP13

int redPin = 14;  //红色LED接GP14

void setup() {

 //LED接口都设置为输出模式

 pinMode(greenPin, OUTPUT);

 pinMode(yellowPin, OUTPUT);

 pinMode(redPin, OUTPUT);

}

 

void loop() {

 digitalWrite(greenPin, HIGH); //点亮绿色LED

 delay(5000);  //延时5秒

 digitalWrite(greenPin, LOW); //关闭绿色LED

 for (int i = 1; i <= 3; i = i + 1) {  //运行三次

  digitalWrite(yellowPin, HIGH); //点亮黄色LED

  delay(500); //延时0.5秒

  digitalWrite(yellowPin, LOW); //关闭黄色LED

  delay(500); //延时0.5秒

 }

 digitalWrite(redPin, HIGH); //点亮红色LED

 delay(5000);  //延时5s

 digitalWrite(redPin, LOW); //关闭红色LED

 

}
```



**代码说明**

1. 定义管脚接口，设置引脚模式，延时函数，输出高低电平参考实验一说明，这里就不多说了。
2. 这里我们还用到了for()循环：最简单形式为for( ; ; )，我们在此实验中用到for (int i = 1; i <= 3; i = i + 1)；表示变量i从1到3，每次自加1，知道不满足 i <= 3这个判断表达式，否则一直执行大括号里的代码，即一共执行3次大括号里的代码；同理：如果是for (int i = 255; i >= 0; i = i - 1)；i每次自减1，当不满足i>= 0时，跳出该for()循环，一共执行256次。

 

 

**测试结果**

上传测试代码成功，上电后，模块上绿色LED亮5秒然后熄灭，黄色LED闪烁3秒然后熄灭，再然后红色LED亮5秒，然后熄灭，模块上3个LED自动模拟交通灯循环运行。

![img](./media/wps49-1776762444024-18-1776762506177-36.png)